package com.mail.server.controller;


import com.mail.model.db.UmsMenu;
import com.mail.model.db.UmsRole;
import com.mail.model.vo.MyPage;
import com.mail.model.vo.UmsMenuVo;
import com.mail.server.common.R;
import com.mail.server.service.UmsMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 后台菜单表 前端控制器
 * </p>
 *
 * @author WJZ
 * @since 2022-06-20
 */
@RestController
@RequestMapping("/menu")
public class UmsMenuController {

	@Autowired
	private UmsMenuService umsMenuService;

	/**
	 * 树形结构返回所有菜单列表
	 * 接口地址:/menu/treeList
	 * @return
	 */
	@GetMapping("/treeList")
	public R<List<UmsMenuVo>> treeList(){
		List<UmsMenuVo> umsMenuVos = umsMenuService.treeList();
		return R.success(umsMenuVos, "操作成功!");
	}

	/**
	 * 分页查询后台菜单(分页查询)
	 * 接口地址:/menu/list/{parentId}
	 * @param pageNum
	 * @param pageSize
	 * @param parentId
	 * @return
	 */
	@GetMapping("/list/{parentId}")
	public R<MyPage<UmsMenu>> list(@RequestParam(defaultValue = "1") Long pageNum,
								   @RequestParam(defaultValue = "10") Long pageSize,
								   @PathVariable("parentId") Long parentId
								   ){
		MyPage<UmsMenu> myPage = umsMenuService.listByPage(pageNum, pageSize, parentId);
		return R.success(myPage, "操作成功!");
	}

	/**
	 * 根据ID获取菜单详情
	 * 接口地址:/menu/{id}
	 * @param id
	 * @return
	 */
	@GetMapping("/{id}")
	public R<UmsMenu> getById(@PathVariable("id") Long id){
		UmsMenu umsMenu = umsMenuService.getById(id);
		return R.success(umsMenu);
	}

	/**
	 * 修改后台菜单
	 * 接口地址:/menu/update/{id}
	 * @param id
	 * @param umsMenu
	 * @return
	 */
	@PostMapping("/update/{id}")
	public R<Integer> update(@PathVariable("id") Long id,
							 @RequestBody UmsMenu umsMenu){
		return umsMenuService.update(umsMenu);
	}

	/**
	 * 修改菜单显示状态
	 * 接口地址:/menu/updateHidden/{id}
	 * @param id
	 * @param hidden
	 * @return
	 */
	@PostMapping("/updateHidden/{id}")
	public R<Integer> updateHidden(@PathVariable("id") Long id,
							 @RequestParam Integer hidden){
		return umsMenuService.updateHidden(id, hidden);
	}

	/**
	 * 根据ID删除后台菜单
	 * 接口地址:/menu/delete/{id}
	 * @param id
	 * @return
	 */
	@PostMapping("/delete/{id}")
	public R<Integer> delete(@PathVariable("id") Long id){
		return umsMenuService.delete(id);
	}

	/**
	 * 添加后台菜单
	 * 接口地址:/menu/create
	 * @param umsMenu
	 * @return
	 */
	@PostMapping("/create")
	public R<Integer> create(@RequestBody UmsMenu umsMenu){
		return umsMenuService.create(umsMenu);
	}
}
